﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.Http;
using SistemaAdministracion.Models.BaseClass;
using System.Security.Principal;
using System.Web.Optimization;

namespace SistemaAdministracion
{
    public class Global : HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {
            // Código que se ejecuta al iniciar la aplicación
            BundleTable.EnableOptimizations = true;
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundlesConfig.RegisterBundles(BundleTable.Bundles);
        }

        public override void Init()
        {
            this.PostAuthenticateRequest += Global_PostAuthenticateRequest;
        }

        void Global_PostAuthenticateRequest(object sender, EventArgs e)
        {
            var authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                //obteniene el valor de la autentificacion encriptada
                string encTicket = authCookie.Value;
                if (!String.IsNullOrEmpty(encTicket))
                {
                    var Ticket = FormsAuthentication.Decrypt(encTicket); //<---- decifra el valor
                    var Id = new UserIdentity(Ticket); //<--- obtenemos el id del usuario
                    var UserRoles = Roles.GetRolesForUser(Id.Name); //<--- obtenemos los roles asociados a ese usuario
                    var AuthorizeUser = new GenericPrincipal(Id, UserRoles); //<--- se instancia una clase que asocia el usuario con el rol 
                    HttpContext.Current.User = AuthorizeUser; //<--- se asigna la asociacion para identificar y autorizar a los usuarios con sus roles
                }
            }
        }
    }
}